/**
 * 应用程序入口文件
 * 功能：初始化 Vue 应用，注册插件和中间件
 */

// 全局样式导入（当前已注释，如需使用可取消注释）
// import './assets/main.css'

// ==================== Vue 核心 ====================
import { createApp } from 'vue' // Vue 3 应用创建函数

// ==================== 状态管理 ====================
import { createPinia } from 'pinia' // Pinia 状态管理库
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' // Pinia 持久化插件，用于将状态保存到 localStorage

// ==================== 应用根组件 ====================
import App from './App.vue' // 应用根组件

// ==================== 路由 ====================
import router from './router' // Vue Router 路由配置

// ==================== VXE 组件库（甘特图相关） ====================
// VXE PC UI 组件库
import VxeUIAll from 'vxe-pc-ui'
import 'vxe-pc-ui/es/style.css' // VXE PC UI 样式
// VXE Table 表格组件
import VxeUITable from 'vxe-table'
import 'vxe-table/es/style.css' // VXE Table 样式
// VXE Gantt 甘特图组件
import VxeUIGantt from 'vxe-gantt'
import 'vxe-gantt/lib/style.css' // VXE Gantt 样式

// ==================== Element Plus UI 组件库 ====================
import ElementPlus from 'element-plus' // Element Plus 组件库
import 'element-plus/dist/index.css' // Element Plus 样式
import zhCn from 'element-plus/es/locale/lang/zh-cn' // Element Plus 中文语言包

import * as ElementPlusIconsVue from '@element-plus/icons-vue'// 使用Element Plus提供的各种SVG图标组件
// ==================== 创建 Vue 应用实例 ====================
const app = createApp(App)

// ==================== 注册插件和中间件 ====================

/**
将每个图标组件以对应的键名注册为全局组件，使得在模板中可以直接使用这些图标组件
 **/
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  app.component(key, component)
}
/**
 * 注册 Element Plus 组件库
 * 配置中文语言包，使组件显示中文文本
 */
app.use(ElementPlus, {
  locale: zhCn, // 设置语言为中文
})

/**
 * 创建并配置 Pinia 状态管理
 * 使用持久化插件，使状态在页面刷新后保持
 */
const pinia = createPinia()
pinia.use(piniaPluginPersistedstate) // 启用持久化插件
app.use(pinia) // 注册 Pinia

/**
 * 注册 Vue Router
 * 启用应用的路由功能
 */
app.use(router)

/**
 * 注册 VXE 组件库
 * 用于表格和甘特图功能
 */
app.use(VxeUIAll) // 注册 VXE PC UI 组件库
app.use(VxeUITable) // 注册 VXE Table 表格组件
app.use(VxeUIGantt) // 注册 VXE Gantt 甘特图组件

/**
 * 挂载应用到 DOM
 * 将 Vue 应用挂载到 id 为 'app' 的 DOM 元素上
 */
app.mount('#app')
